#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
机器学习辅助提示词评估演示
展示如何使用基于sentence-transformers的评估功能
"""

import asyncio
import sys
import os

# 添加项目根目录到Python路径
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

from src.research_core import (
    MLPromptEvaluator,
    create_ml_evaluator_with_examples
)


async def demo_ml_prompt_evaluation():
    """演示机器学习辅助提示词评估功能"""
    print("=== 机器学习辅助提示词评估功能演示 ===\n")
    
    # 创建评估器
    evaluator = create_ml_evaluator_with_examples()
    
    # 定义测试提示词
    prompts = [
        # 质量较低的提示词
        "写代码",
        
        # 中等质量的提示词
        "写一个Python函数来计算斐波那契数列，要有注释。",
        
        # 高质量的提示词
        """你是一位经验丰富的Python开发专家。请根据以下要求编写代码：
        1. 功能需求：实现一个函数，用于计算斐波那契数列的前n项
        2. 技术要求：
           - 使用递归算法实现
           - 添加输入验证，确保n为非负整数
           - 包含异常处理
           - 添加详细的中文注释说明算法逻辑
        3. 输出要求：
           - 提供完整的可执行代码
           - 代码遵循PEP8规范
           - 包含简单的测试用例
        4. 示例：
           输入：n=5
           输出：[0, 1, 1, 2, 3, 5]"""
    ]
    
    # 定义需求
    requirement = "我需要一个能够帮助用户写Python代码的AI助手提示词，要求提供清晰、可运行的代码示例，并包含适当的注释解释代码逻辑。"
    
    print("评估不同质量的提示词:")
    print("=" * 50)
    
    # 评估每个提示词
    for i, prompt in enumerate(prompts, 1):
        print(f"\n{i}. 提示词版本 {i}:")
        print(f"   内容预览: {prompt[:50]}...")
        
        # 使用ML评估器
        ml_evaluation = evaluator.evaluate_prompt(prompt, requirement)
        
        print(f"   ML综合得分: {ml_evaluation['ml_score']}")
        print(f"   与示例相似度: {ml_evaluation['similarity_to_examples']}")
        print(f"   语义连贯性: {ml_evaluation['semantic_coherence']}")
        print(f"   评估详情: {ml_evaluation['details']}")
    
    print("\n" + "=" * 50)
    print("提示词比较:")
    print("=" * 50)
    
    # 比较提示词
    comparison = evaluator.compare_prompts(prompts)
    if "error" not in comparison:
        best_index = comparison["best_prompt_index"]
        print(f"最佳提示词索引: {best_index}")
        print(f"最佳提示词预览: {comparison['best_prompt'][:50]}...")
        print(f"各提示词平均相似度: {[round(s, 3) for s in comparison['avg_similarities']]}")
    else:
        print(f"比较失败: {comparison['error']}")


async def demo_simple_ml_evaluation():
    """演示简单模式下的ML评估（当sentence-transformers不可用时）"""
    print("\n=== 简单模式下的ML评估演示 ===\n")
    
    # 创建不依赖sentence-transformers的评估器
    evaluator = MLPromptEvaluator()
    
    # 由于我们没有添加示例，这将使用简单的启发式方法
    prompt = "请写一个Python函数来计算斐波那契数列，需要有注释。"
    requirement = "需要一个计算斐波那契数列的Python函数"
    
    print(f"提示词: {prompt}")
    print(f"需求: {requirement}")
    
    evaluation = evaluator.evaluate_prompt(prompt, requirement)
    print(f"简单评估得分: {evaluation['ml_score']}")
    print(f"与示例相似度: {evaluation['similarity_to_examples']}")
    print(f"语义连贯性: {evaluation['semantic_coherence']}")
    print(f"评估详情: {evaluation['details']}")


async def main():
    """主函数"""
    await demo_ml_prompt_evaluation()
    await demo_simple_ml_evaluation()


if __name__ == "__main__":
    asyncio.run(main())